⚠
Data sync problem: {{ reloginMessage }}
Change over {{ kpiRangeLabel }}
{{ kpiRangeDates }}
1d
30d
{{ kpiRangeLabel }}
{{ k.label }}
{{ k.value }}
{{ k.sub }}
{{ hoursCard.label }}
{{ hoursCard.cumValue }}
{{ hoursCard.cumSub }}
{{ hoursCard.dayValue }}
{{ hoursCard.daySub }}
Demo
Loading analytics…
{{ k.label }}
{{ k.value }}
{{ k.sub }}
Acquisition & activation funnel
{{ f.label }}
{{ f.value }}
Onboarding timing — median days (p90 · n)
{{ d.label }}
{{ d.value }}
{{ d.sub }}
{{ t.title }}
| {{ t.dimLabel }} | Applicants | On Hub | Activation % | Avg uploads | Median strap→1st (d) |
|---|---|---|---|---|---|
| {{ r.value }} | {{ r.applicants }} | {{ r.onHub }} | {{ r.activation }} | {{ r.avgUploads }} | {{ r.medianAct }} |
Hub engagement
Uploads distribution
{{ b.label }}
{{ b.count }}
{{ c.label }}
{{ c.value }}
Payments & data quality
{{ p.label }}
{{ p.value }}
Data quality
{{ q.label }}
{{ q.value }}
Loading hours…
{{ k.label }}
{{ k.value }}
{{ k.sub }}
{{ k.label }}
{{ k.value }}
{{ k.sub }}
Hours collected · per day {{ hrs.dayAvgText }}
qualified not qualified pending
{{ d.weekLabel }}
{{ d.label }}
{{ d.value }}
{{ d.qText }} ·{{ d.nText }} ·{{ d.pText }}
{{ hrs.accrueNote }}
Hours collected · per week {{ hrs.weekAvgText }}
qualified not qualified pending
{{ w.label }}
{{ w.value }}
{{ w.qText }} ·{{ w.nText }} ·{{ w.pText }}
{{ hrs.accrueNote }}
{{ t.title }}
| {{ t.dimLabel }} | Hours | Collectors | Avg hrs/collector | Avg length | Uploads |
|---|---|---|---|---|---|
| {{ r.value }} | {{ r.hours }} | {{ r.collectors }}{{ r.collCaret }} | {{ r.avg }} | {{ r.avgLen }} | {{ r.uploads }} |
|
{{ m.hours }}
|
|||||
Top collectors
{{ c.rank }}
{{ c.country }}
{{ c.hours }}
Collectors by hours collected
{{ b.label }}
{{ b.count }}
🎯 Collection goals
{{ hrs.goals.totalText }}
collected so far · {{ hrs.goals.nextLabel }}
{{ hrs.goals.pctText }}
{{ hrs.goals.remainingText }}
{{ hrs.goals.etaText }}
{{ g.emoji }}
{{ g.label }}
{{ g.state }}
{{ g.pctText }}
→
{{ hub.rangeText }}
{{ hub.orgName }} · official partner feed
Hub Partner API not configured
Set HUB_API_KEY in the server .env and restart the api service.
Loading partner data…
!
Couldn't reach the Hub Partner API
The upstream endpoint didn't respond or rejected the request.
{{ k.label }}
{{ k.value }}
{{ k.sub }}
Contributors · payroll view
{{ hub.matchText }}
| Contributor {{ hub.si_email }} | Status {{ hub.si_status }} | Uploads {{ hub.si_uploads }} | Hours {{ hub.si_hours }} | Quality {{ hub.si_quality }} | Diversity {{ hub.si_diversity }} | Last active {{ hub.si_last }} | Airtable {{ hub.si_linked }} |
|---|---|---|---|---|---|---|---|
|
{{ r.title }}
{{ r.sub }}
|
{{ r.status }} | {{ r.uploads }} | {{ r.hours }} | {{ r.quality }} | {{ r.diversity }} | {{ r.lastActive }} | {{ r.linkedLabel }} |
{{ hub.footText }}
🔒
Bill to Hub is private
This view shows what we invoice Hub. Enter the billing password to continue — it is remembered until you close this browser tab.
!
That password was rejected
The server did not accept it. Try again.
Billing needs the Hub Partner API
Set HUB_API_KEY in the server .env and restart the api service. Hours are read from the official partner feed.
Computing weekly bill…
!
Couldn't compute the bill
The billing endpoint didn't respond.
{{ billing.partialText }}
{{ k.label }}
{{ k.value }}
{{ k.sub }}
Weekly charge to Hub
{{ billing.footText }}
| Week | US hours | LATAM hours | Hours $ | Bonuses | Headbands | Week total | Session h |
|---|---|---|---|---|---|---|---|
|
{{ r.week }}
{{ r.range }}
hours unavailable — incomplete |
{{ r.usH }} | {{ r.latamH }} | {{ r.hoursCharge }} | {{ r.bonus }} | {{ r.headband }} | {{ r.total }} | {{ r.snap }} |
| Total | {{ billing.totalRow.usH }} | {{ billing.totalRow.latamH }} | {{ billing.totalRow.hoursCharge }} | {{ billing.totalRow.bonus }} | {{ billing.totalRow.headband }} | {{ billing.totalRow.total }} | — |
Worth checking before invoicing
{{ l }}
Airtable Shipping Requests ↔ Ecommex WMS · syncs every 2h (on the hour, CDMX)
Last sync: {{ deliveries.lastSyncText }}
Deliveries need the Ecommex API
Set ECOMMEX_API_KEY (and ECOMMEX_AIRTABLE_PAT) in the server .env and restart the api + collector services.
Loading delivery KPIs…
!
Couldn't load delivery KPIs
The Ecommex endpoint didn't respond.
Last run failed: {{ deliveries.lastRunError }}
{{ k.label }}
{{ k.value }}
{{ k.sub }}
Sync runs
{{ deliveries.footText }}
| Run (CDMX) | Trigger | Status | Requests | → Ecommex | → Airtable | Duplicates | Flagged |
|---|---|---|---|---|---|---|---|
|
{{ r.when }}
{{ r.message }}
|
{{ r.trigger }} | {{ r.status }} | {{ r.rows }} | {{ r.created }} | {{ r.updated }} | {{ r.dups }} | {{ r.flagged }} |
Deliveries
{{ deliveries.listCountText }}
Nothing matches that search.
| Name | Confirmed | Tracking number | Carrier | Status | Last update | |
|---|---|---|---|---|---|---|
|
{{ r.name }}
|
{{ r.email }} | {{ r.confirmed }} |
|
{{ r.carrier }} | {{ r.status }} | {{ r.date }} |
Computing weekly hours…
!
Couldn't load high achievers
The highachievers endpoint didn't respond.
{{ k.label }}
{{ k.value }}
{{ k.sub }}
Hours by day · target {{ ha.targetText }}
{{ ha.dayFootText }}
| Participant | {{ dh.label }} | Total | Status |
|---|---|---|---|
|
{{ r.name }}
{{ r.sub }}
|
{{ c.text }} |
{{ r.totalText }} | {{ r.badge }} |
Hours by ISO week · target {{ ha.targetText }}
{{ ha.footText }}
| Participant | {{ wh.label }} | Status |
|---|---|---|
|
{{ r.name }}
{{ r.sub }}
|
{{ c.text }} | {{ r.badge }} |
Loading freelancer hours…
!
Couldn't load freelancers
The freelancers data didn't respond.
{{ k.label }}
{{ k.value }}
{{ k.sub }}
{{ emp.hrWarning }}
Onboarding
{{ k.label }}
{{ k.value }}
{{ k.sub }}
By stage · HR's OB Status
{{ st.label }}
{{ st.value }}
{{ st.sub }}
{{ emp.obTieLine }}
{{ fl }}
{{ emp.panelTitle }}
{{ emp.countText }}
accrues from daily snapshots
| Freelancer{{ emp.indName }} | HR status | Total{{ emp.indTotal }} | This week{{ emp.indWeek }} | {{ wh.label }} | Last active |
|---|---|---|---|---|---|
|
{{ r.name }}
{{ r.email }}
|
{{ r.hrStatus }} | {{ r.total }} |
{{ r.thisWeek }}
{{ r.lastWeek }}
|
{{ c.text }} |
{{ r.lastActive }} |
| {{ emp.totalRow.label }} | {{ emp.totalRow.total }} | {{ emp.totalRow.thisWeek }} | {{ c.text }} |
On HR’s list · no Hub account yet
{{ emp.hrMissingCount }} people · closest to recording first · no hours can be tracked until an account exists
| {{ m.name }} |
{{ m.status }} |
Withdrawn by HR · still has an account
can still record hours — offboarding gap
| {{ w.name }} |
{{ w.email }} | {{ w.status }} |
Has an account · not on HR’s list
{{ emp.hrNoRecordCount }} accounts
| {{ n.name }} |
{{ n.email }} |
Crunching weekly segments…
!
Couldn't load the analysis
The overall endpoint didn't respond.
{{ k.label }}
{{ k.value }}
{{ k.sub }}
{{ c.label }}
{{ c.value }}
{{ c.sub }}
Hours per week · click a week to break it down
{{ lg.label }}
| Week | By strategy | Hours | Active | Hrs/person | WoW | |||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
{{ w.caret }}
{{ w.label }}
{{ w.dates }}
|
{{ w.total }} | {{ w.people }} | {{ w.perPerson }} | {{ w.delta }} | ||||||||||||||||||||||||||||||||||||||
|
All week · Mon–Sun
By day · click a day for its strategies
|
||||||||||||||||||||||||||||||||||||||||||
No session weeks to show yet.
{{ ov.footText }}
{{ ovd.ingestNote }}
Loading participants…
{{ ovd.partTitle }}
| {{ h.label }} | |||||||
|---|---|---|---|---|---|---|---|
|
{{ p.name }}
{{ p.sub }}
|
{{ p.hours }} | {{ p.sessions }} | {{ p.avgMin }} |
|
{{ p.peak }}
{{ p.peakSub }}
|
{{ p.lastActive }} | {{ p.status }} |
{{ ovd.partScopeNote }}
{{ ovd.partFoot }}
Loading sessions…
{{ ovd.sessTitle }} · sessions
{{ ovd.sessSub }}
{{ ovd.sessTotal }}
Hour of day · local time
{{ h.label }}
Hour × weekday
{{ ovd.todPeak }}
{{ h.label }}
{{ row.weekday }}
{{ ovd.todFoot }}
Retention by onboarding week
| {{ h }} | ||
|---|---|---|
| {{ c.cohort }} {{ c.start }} | {{ c.size }} | {{ x.text }} |
{{ ovd.cohortFoot }}
Loading referrals…
!
Couldn't load referrals
The referrals endpoint didn't respond.
{{ k.label }}
{{ k.value }}
{{ k.sub }}
Referred people · by referrer
{{ ref.footText }}
| Referred | In Hub | {{ wh.label }} | Total |
|---|---|---|---|
| {{ g.label }} {{ g.bizPill }} {{ g.sub }} | {{ c.text }} |
{{ g.totText }} | |
|
{{ r.name }}
{{ r.email }}
|
{{ r.inHub }} | {{ c.text }} |
{{ r.total }} |
| TOTAL | {{ c.text }} |
{{ ref.grand.total }} | |